#ifndef HEAP_H_
#define HEAP_H_

//Tas
typedef struct heap{
	void **		data;	//Pointeur sur les données
	int	*		val;	//Valeurs sur laquelles sera appliquée la relation d'ordre
	int			maxsize;//Capacité maximale du tas
	int			size;	//Nombre d'éléments dans le tas
}heap_t;


//Initialisation d'un tas
extern void heap_init(heap_t * h, int maxsize);

//destruction d'un tas (libère la mémoire)
extern void heap_free(heap_t * h);

//insertion d'un élément dans le tas => retourne 0 si tas plein sinon le nombre d'éléments
extern int heap_push(heap_t * heap, int val ,void * data);

//extratction du minimum => retourne le nombre d'élément restant
extern int heap_pop(heap_t * heap);

//Renvois le sommet du tas (ie le minimum) ou NULL si vide
extern void * heap_getMin(heap_t * heap);

#endif /* HEAP_H_ */
